const jwt = require('jsonwebtoken')
const { promisify } = require('util')

const { uuid } = require('../config/config.default')
// // 生成 jwt
// const token = jwt.sign({ foo: 'hello' }, '555')

// // 解析 jwt
// const jwts = jwt.verify(token, '555')

// console.log(token, '\n', jwts)

const toJwt = promisify(jwt.sign)
const verify = promisify(jwt.verify)

const createToken = async (userInfo) => {
	return await toJwt({ userInfo }, uuid, {
		expiresIn: 60 * 60 * 24
	})
}

// 做成中间件的方式
const verifyToken = async (req, res, next) => {
	let token = req.headers.authorization

	token = token ? token.split('Bearer ')[1] : null
	if (!token) {
		res.status(402).json({ error: '请传入 token' })
	}
	try {
		const userInfo = await verify(token, uuid)
		req.user = userInfo
		next()
	} catch (err) {
		res.status(402).json({ error: 'token 失效' })
	}
}

module.exports = {
	createToken,
	verifyToken
}
